﻿using System;
using System.IO;
using System.Windows.Forms;
using System.Xml.Serialization;
using Business.Entity.Sped;
using Business.Enum;
using Business.InformacoesIniciais.MapeamentoXML;
using NHibernate;

namespace Business.InformacoesIniciais
{
    public class DadosSPED
    {
        public static void PlanoContaReferencial(ISession session)
        {


            try
            {
                var serializer = new XmlSerializer(typeof(PlanoContaReferencialXml));
                var arquivo = Environment.CurrentDirectory + "\\arquivos\\plano_conta.xml";
                var reader = new StreamReader(arquivo);
                var contas = ((PlanoContaReferencialXml)serializer.Deserialize(reader)).Contas;
                reader.Close();

                foreach (var conta in contas)
                {
                    using (var ct = new PlanoContaReferencial())
                    {
                        ct.Codigo = conta.Codigo;
                        ct.Descricao = conta.Descricao;
                        var sCod = "0";
                        if (conta.Codigo.Contains("."))
                        {
                            sCod = conta.Codigo.Substring(0,
                                conta.Codigo.IndexOf(".", System.StringComparison.Ordinal));
                        }
                        else
                        {
                            sCod = conta.Codigo;
                        }

                        var cod = int.Parse(sCod);
                        switch (cod)
                        {
                            case 1:
                                ct.NaturezaConta = NaturecaConta.Ativo;
                                break;
                            case 2:
                                ct.NaturezaConta = NaturecaConta.Passivo;
                                break;
                            case 3:
                                ct.NaturezaConta = NaturecaConta.ResultadoLiquido;
                                break;
                            case 4:
                                ct.NaturezaConta = NaturecaConta.SuperavitDeficit;
                                break;
                            case 5:
                                ct.NaturezaConta = NaturecaConta.CustosProducao;
                                break;
                            default:
                                ct.NaturezaConta = NaturecaConta.Outras;
                                break;
                        }
                        session.Save(ct);
                    }
                }
            }
            catch (Exception exception)
            {
                MessageBox.Show("Não foi possível carregar o plano de contas referêncial para o " +
                                "banco de dados.\n Erro: " + exception.Message);

                throw;
            }

        }
    }
}
